package jers.util;

import java.util.logging.Level;

import jers.JERS;

/**
 * Uma implementacao simples para logger.
 * <p>
 * Esta classe usa a classe {@link java.util.logging.Logger} 
 * para fazer a tarefa real de log.
 * </p>
 * 
 * @see {@link java.util.logging.Logger}
 * 
 * @author 
 * 		<a href="mailto:felipe.zappala@gmail.com">
 * 			Luis Felipe Zappala
 * 		</a> [ <a href="http://lncc.br/ist">ISTCC-P</a> / 2009 ]
 */
public class SimpleLogger implements Logger {
	
	/** Define o sufixo no log. */
	protected static String SUFIX; 
	
	/** Define o uso do logger. */
	protected boolean useLogger;
	
	/** A instancia do objeto de logger real. */
	protected final java.util.logging.Logger logger;
	{
		logger = java.util.logging.Logger.getLogger("SimpleLogger");
		Boolean b = Boolean.valueOf(JERS.config.getProperty("jers.log.use"));
		useLogger = b.booleanValue();
		
		SUFIX = "[JERS] ";
	}
	
	/**
	 * Executa o algoritmo de logger.
	 * .
	 * @param level O tipo do logger a ser executado.
	 * @param thrown Caso for um log de erro.
	 * @param msg As mensagens a serem logadas.
	 */
	private void log(Level level, Throwable thrown, Object... msg) {
		StringBuilder log = new StringBuilder(SUFIX);
		for (Object m : msg) {
			 log.append(m);				
		}
		if (thrown != null) {
			logger.log(level, log.toString(), thrown);
		} else {
			logger.log(level, log.toString());
		}
	}

	public void info(Object... msg) {
		if (useLogger) {
			log(Level.INFO, null, msg);
		}
	}
	
	public void error(Object... msg) {
		if (useLogger) {
			log(Level.SEVERE, null, msg);
		}
	}
	
	public void error(Throwable thrown, Object... msg) {
		if (useLogger) {
			log(Level.SEVERE, thrown, msg);
		}
	}

	public boolean isUseLogger() {
		return this.useLogger;
	}

	public void setUseLogger(boolean useLogger) {
		this.useLogger = useLogger;
	}
	
}
